package com.web.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Date;

/**
 * @author FDjavaone
 */
public class ChangeBeanNullToStr {
    public static Object transfer(Object obj) {
        Class classz = obj.getClass();
        // 获取所有该对象的属性值
        Field fields[] = classz.getDeclaredFields();

        // 遍历属性值，取得所有属性为 null 值的
        for (Field field : fields) {

            Type t = field.getGenericType();
            if (!t.toString().equals("boolean")) {
                try {

                    Method m = classz.getMethod("get" + change(field.getName()));
                    // 调用该字段的get方法
                    Object name = m.invoke(obj);
                    if (name == null) {
                        if (t.getTypeName().equals("java.lang.String")) {
                            Method mtd = classz.getMethod("set" + change(field.getName()), new Class[]{String.class});
                            mtd.invoke(obj, new Object[]{""});
                        } else if (t.getTypeName().equals("java.lang.Integer")) {
                            Method mtd = classz.getMethod("set" + change(field.getName()), new Class[]{Integer.class});
                            mtd.invoke(obj, new Object[]{0});
                        } else if (t.getTypeName().equals("java.lang.Long")) {
                            Method mtd = classz.getMethod("set" + change(field.getName()), new Class[]{Long.class});
                            mtd.invoke(obj, new Object[]{0L});
                        } else if (t.getTypeName().equals("java.util.Date")) {
                            Method mtd = classz.getMethod("set" + change(field.getName()), new Class[]{Date.class});
                            mtd.invoke(obj, new Object[]{new Date()});
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        return obj;
    }

    public static String change(String src) {
        if (src != null) {
            StringBuffer sb = new StringBuffer(src);
            sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
            return sb.toString();
        } else {
            return null;
        }
    }
}
